// 第一题：
//   实现一个promise.retry方法 重试异步函数
// 如果异步函数执行成功  resolve结果
// 如果异步函数执行失败 就尝试超过一定次数才进行reject

let testFn = function() {
    let random = Math.random() * 10;
    return new Promise((resolve, reject) => {
        setTimeout(_ => {
            if (random < 7) {
                reject(random);
            } else {
                resolve(random);
            }
        }, 1000);
    })
};

Promise.retry = function (fn, times) {
    return new Promise(async (resolve, reject) => {
        while(true) {
            times--;
            try {
                let res = await fn();
                resolve(res);
                console.log('异步函数执行成功：', res);
                break;
            } catch (error) {
                console.log('异步函数执行失败：', error);
                if (times === 0) {
                    reject(error);
                    break;
                };
            };
        }
    });
 };

 Promise.retry(testFn, 3).catch(err => console.log('最终还是失败了:', err));